#include <iostream>
#include <vector>
#include <math.h>
using namespace std;

vector<unsigned long long> dp; // 讲真的这个动态规划还挺有难度的

int main() {
    for (int i = 0; i < 30; i++) {
        if (i <= 1) { dp.push_back(0); }
        else if (i == 2) { dp.push_back(1); }
        else if (i == 3) { dp.push_back(3); }
        else {
            // 我们用dp[i]表示长度为(i + 1)时的合法情况总数，
            // (i + 1)的所有情况都可以由(i)的所有情况在其队伍尾加上一个盒子以构成，这就满足dp的重叠子问题特性
            // 1. 以“末尾加上盒子”的思维思考，如果长度为(i)时一个情况合法，那么对其末尾加上L或U都是合法的；
            // 2. 如果长度为(i)时一个情况不合法，除非其末尾是...LUU的组合，并在本回合加上U，否则不可能在本回合达到合法
            // 综上所述，从(i)递推到(i + 1)只有上述两种情况使得(i + 1)时合法，于是导出状态转移方程：
            dp.push_back(2 * dp[i - 1] + (pow(2, i - 3) - dp[i - 4]));
        }
    }
    int currInput = -1;
    while (currInput != 0) {
        cin >> currInput;
        if (currInput != 0) {
            cout << dp[currInput - 1] << endl;
        }
    }
    return 0;
}